﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SVC_BLL;
using SVC_DAL;
using System.Text.RegularExpressions;

namespace SVC.CADASTROS
{
    public partial class ProdutoSapataria : Form
    {
        public ProdutoSapataria()
        {
            InitializeComponent();
        }

        public int proCompra = 0;
        ProdutosBLL objPro = new ProdutosBLL();
        private Ean13 ean13 = null;

        public void stiloGrid()
        {

            int i = 0;
            if (gvPesquisa.Rows.Count != 0)
            {
                foreach (DataGridViewRow row in gvPesquisa.Rows)
                {
                    if (i % 2 != 0)
                    {
                        row.DefaultCellStyle.BackColor = Color.FromName("ActiveCaption");
                        row.DefaultCellStyle.ForeColor = Color.White;
                    }
                    i++;
                }
                gvPesquisa.ClearSelection();
                objPro.limpar();
            }
        }

        public void limpar()
        {
            try
            {
                txtCodigo.Text = "";
                txtData.Text = DateTime.Now.ToString();
                txtEstoqueAtual.Text = "";
                txtEstoqueMaximo.Text = "";
                txtEstoqueMinimo.Text = "";
                txtPrecoCusto.Text = "";
                txtPrecoVenda.Text = "";
                txtProduto.Text = "";
                cbCategoria.SelectedIndex = -1;
                cbGrupo.SelectedIndex = -1;
                cbSubgrupo.SelectedIndex = -1;
                cbUnidade.SelectedIndex = -1;
                cbMarca.SelectedIndex = -1;
                cbFornecedor.SelectedIndex = -1;
                txtPesquisar.Text = "";
                txtCodigoBarras.Text = "";
                txtMargem.Text = "";
                txtAdicionaEstoque.Text = "";
                txtTamanho.Text = "";
                txtComissao.Text = "";
                txtCodigo.Enabled = true;
                txtCodigo.ReadOnly = false;
                pictureBox1.Image = null;
                checkBox1.Checked = false;
                txtEstoqueAtual.Enabled = true;
                txtAdicionaEstoque.Enabled = false;


            }
            catch (Exception)
            {

                throw;
            }
        }

        public void carregaCombo()
        {
            try
            {
                Dados objD = new Dados();
                objD.preencheComboBox(cbCategoria, "Categoria", "cat_codigo", "cat_descricao", "", "cat_descricao");
                objD = null;
                objD = new Dados();
                objD.preencheComboBox(cbGrupo, "Grupo", "gru_codigo", "gru_descricao", "", "gru_descricao");
                objD = null;
                objD = new Dados();
                objD.preencheComboBox(cbSubgrupo, "SubGrupo", "sg_codigo", "sg_descricao", "", "sg_descricao");
                objD = null;
                objD = new Dados();
                objD.preencheComboBox(cbUnidade, "Unidades", "uni_codigo", "uni_descricao", "", "uni_descricao");
                objD = null;
                objD = new Dados();
                objD.preencheComboBox(cbMarca, "Marcas", "mar_codigo", "mar_descricao", "", "mar_descricao");
                objD = null;
                objD = new Dados();
                objD.preencheComboBox(cbFornecedor, "Fornecedores", "for_codigo", "for_nome", "for_tipo_fornecedor = 'Pessoa Física'", "for_nome");
                objD = null;
            }
            catch (Exception)
            {
                throw;
            }

        }

        public void carregaPropriedades()
        {
            try
            {
                if (txtCodigo.Text != "")
                    objPro.pro_codigo = int.Parse(txtCodigo.Text);
                else
                    objPro.pro_codigo = 0;
                txtProduto.Text = txtProduto.Text.Trim();
                if (txtProduto.Text != "")
                    objPro.pro_nome = txtProduto.Text;
                else
                    throw new Exception("O campo nome é de preenchimento obrigatório");
                objPro.pro_codigoBarra = txtCodigoBarras.Text;
                objPro.pro_dataCadastro = DateTime.Now;
                if (cbCategoria.SelectedValue == null)
                    throw new Exception("Categoria não encontrada na base de dados");
                else
                    objPro.pro_categoria = int.Parse(cbCategoria.SelectedValue.ToString());
                if (cbGrupo.SelectedValue == null)
                    objPro.pro_grupo = 0;
                else
                    objPro.pro_grupo = int.Parse(cbGrupo.SelectedValue.ToString());
                if (cbSubgrupo.SelectedValue == null)
                    objPro.pro_subGrupo = 0;
                else
                    objPro.pro_subGrupo = int.Parse(cbSubgrupo.SelectedValue.ToString());
                if (cbUnidade.SelectedValue == null)
                    objPro.pro_unidade = 0;
                else
                    objPro.pro_unidade = int.Parse(cbUnidade.SelectedValue.ToString());
                if (cbMarca.SelectedValue == null)
                    throw new Exception("Marca não encontrada na base de dados");
                else
                    objPro.pro_marca = int.Parse(cbMarca.SelectedValue.ToString());
                if (cbFornecedor.SelectedValue == null)
                    throw new Exception("Fornecedor não encontrada na base de dados");
                else
                    objPro.pro_fornecedor = int.Parse(cbFornecedor.SelectedValue.ToString());
                String x = "";
                for (int i = 0; i <= txtPrecoCusto.Text.Length - 1; i++)
                {
                    if ((txtPrecoCusto.Text[i] >= '0' &&
                    txtPrecoCusto.Text[i] <= '9') ||
                    txtPrecoCusto.Text[i] == ',')
                    {
                        x += txtPrecoCusto.Text[i];
                    }
                }
                txtPrecoCusto.Text = x;
                txtPrecoCusto.SelectAll();

                txtPrecoCusto.Text = txtPrecoCusto.Text.Trim();
                if (txtPrecoCusto.Text != "")
                    objPro.pro_precoCusto = Double.Parse(txtPrecoCusto.Text);
                else
                    throw new Exception("O campo 'preço de custo' é de preenchimento obrigatório");

                x = "";
                for (int i = 0; i <= txtPrecoVenda.Text.Length - 1; i++)
                {
                    if ((txtPrecoVenda.Text[i] >= '0' &&
                    txtPrecoVenda.Text[i] <= '9') ||
                    txtPrecoVenda.Text[i] == ',')
                    {
                        x += txtPrecoVenda.Text[i];
                    }
                }
                txtPrecoVenda.Text = x;
                txtPrecoVenda.SelectAll();

                txtPrecoVenda.Text = txtPrecoVenda.Text.Trim();
                if (txtPrecoVenda.Text != "")
                    objPro.pro_precoVenda = Double.Parse(txtPrecoVenda.Text);
                else
                    throw new Exception("O campo 'preço de venda' é de preenchimento obrigatório");
                txtEstoqueAtual.Text = txtEstoqueAtual.Text.Trim();
                if (txtEstoqueAtual.Text != "")
                    objPro.pro_quantidade = int.Parse(txtEstoqueAtual.Text);
                else
                    throw new Exception("O campo 'estoque atual' é de preenchimento obrigatório");
                if (txtEstoqueMinimo.Text != "")
                    objPro.pro_estoqueMin = int.Parse(txtEstoqueMinimo.Text);
                else
                    throw new Exception("O campo 'estoque mínimo' é de preenchimento obrigatório");
                if (txtEstoqueMaximo.Text != "")
                    objPro.pro_estoqueMax = int.Parse(txtEstoqueMaximo.Text);
                else
                    throw new Exception("O campo 'estoque máximo' é de preenchimento obrigatório");

                txtTamanho.Text = txtTamanho.Text.Trim();
                if (txtTamanho.Text != "")
                    objPro.pro_tamanho = int.Parse(txtTamanho.Text);
                else
                {
                    throw new Exception("O campo tamanho é de preenchimento obrigatório");
                    //objPro.pro_tamanho = 0;
                }
                txtMargem.Text = txtMargem.Text.Trim();
                if (txtMargem.Text != "")
                    objPro.pro_margem = Double.Parse(txtMargem.Text);
                else
                    objPro.pro_margem = 0;
                txtAdicionaEstoque.Text = txtAdicionaEstoque.Text.Trim();
                if (txtAdicionaEstoque.Text != "")
                    objPro.pro_quantidade = objPro.pro_quantidade + int.Parse(txtAdicionaEstoque.Text);
                txtComissao.Text = txtComissao.Text.Trim();
                if (txtComissao.Text != "")
                    objPro.pro_comissao = Double.Parse(txtComissao.Text);
                else
                    objPro.pro_comissao = 0;

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void carregaCampos()
        {
            try
            {
                if (objPro.pro_codigo == 0)
                    txtCodigo.Text = "";
                else
                    txtCodigo.Text = objPro.pro_codigo.ToString();
                txtProduto.Text = objPro.pro_nome;
                txtCodigoBarras.Text = objPro.pro_codigoBarra;
                if (txtCodigoBarras.Text.Length == 13)
                {
                    System.Drawing.Graphics g = this.pictureBox1.CreateGraphics();
                    g.FillRectangle(new System.Drawing.SolidBrush(System.Drawing.SystemColors.Control),
                        new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height));
                    CreateEan13();
                    ean13.Scale = (float)Convert.ToDecimal("0,8");//(float)Convert.ToDecimal(cboScale.Items[cboScale.SelectedIndex]);
                    ean13.DrawEan13Barcode(g, new System.Drawing.Point(0, 0));
                    g.Dispose();
                }
                txtData.Text = objPro.pro_dataCadastro.ToString();
                cbCategoria.SelectedValue = objPro.pro_categoria;
                if (objPro.pro_grupo != 0)
                    cbGrupo.SelectedValue = objPro.pro_grupo;
                else
                    cbGrupo.SelectedIndex = -1;
                if (objPro.pro_subGrupo != 0)
                    cbSubgrupo.SelectedValue = objPro.pro_subGrupo;
                else
                    cbSubgrupo.SelectedIndex = -1;
                if (objPro.pro_unidade != 0)
                    cbUnidade.SelectedValue = objPro.pro_unidade;
                else
                    cbUnidade.SelectedIndex = -1;
                cbMarca.SelectedValue = objPro.pro_marca;

                FornecedoresBLL objFor = new FornecedoresBLL();
                objFor.localizar(objPro.pro_fornecedor.ToString(), "for_codigo");
                if (objFor.for_tipo_fornecedor == "Pessoa Jurídica")
                {
                    checkBox1.Checked = true;
                    Dados objD = new Dados();
                    objD.preencheComboBox(cbFornecedor, "Fornecedores", "for_codigo", "for_razaoSocial", "for_tipo_fornecedor = 'Pessoa Jurídica'", "for_razaoSocial");
                    objD = null;
                }
                else
                {
                    checkBox1.Checked = false;
                    Dados objD = new Dados();
                    objD.preencheComboBox(cbFornecedor, "Fornecedores", "for_codigo", "for_nome", "for_tipo_fornecedor = 'Pessoa Física'", "for_nome");
                    objD = null;
                }

                cbFornecedor.SelectedValue = objPro.pro_fornecedor;
                objFor = null;
                txtPrecoCusto.Text = objPro.pro_precoCusto.ToString();
                txtPrecoCusto.Text = String.Format(txtPrecoCusto.Text, "C");
                txtPrecoVenda.Text = objPro.pro_precoVenda.ToString();
                txtPrecoVenda.Text = String.Format(txtPrecoVenda.Text, "C");
                txtEstoqueAtual.Text = objPro.pro_quantidade.ToString();
                txtEstoqueMinimo.Text = objPro.pro_estoqueMin.ToString();
                txtEstoqueMaximo.Text = objPro.pro_estoqueMax.ToString();
                txtMargem.Text = objPro.pro_margem.ToString();
                txtTamanho.Text = objPro.pro_tamanho.ToString();
                txtComissao.Text = objPro.pro_comissao.ToString();
                txtAdicionaEstoque.Enabled = true;
                txtEstoqueAtual.Enabled = false;

                if (txtPrecoVenda.Text != "")
                    txtPrecoVenda.Text = Convert.ToDouble(txtPrecoVenda.Text).ToString("C");
                if (txtPrecoCusto.Text != "")
                    txtPrecoCusto.Text = Convert.ToDouble(txtPrecoCusto.Text).ToString("C");

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void carregaGrid()
        {
            try
            {
                DataTable tab = null;
                tab = objPro.localizarEmTudo(txtPesquisar.Text);
                gvPesquisa.DataSource = tab;
                stiloGrid();
                gvPesquisa.ClearSelection();
            }
            catch (Exception)
            {

                throw;
            }
        }

        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            if (keyData == Keys.Escape)
                this.Close();
            return base.ProcessCmdKey(ref msg, keyData);
        } 

        private void ProdutoSapataria_Load(object sender, EventArgs e)
        {
            try
            {
                this.MaximumSize = new Size(this.Width, this.Height);
                this.MinimumSize = new Size(this.Width, this.Height);
                carregaCombo();
                limpar();
                txtData.Enabled = false;
                TabControl1.SelectedIndex = 0;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }  
        }

        private void btSalvar_Click(object sender, EventArgs e)
        {
            try
            {
                if (TabControl1.SelectedIndex == 0)
                {
                    //Carregar os campos no objeto
                    carregaPropriedades();

                    if (objPro.pro_codigo == 0) //Se o código for 0, significa que não é alteração, mas sim inserção 
                    {
                        //Verificar se produto já existe
                        objPro.localizar(objPro.pro_nome, "pro_nome"); //Pesquisa por descrição, na coluna descrição
                        if (objPro.pro_codigo != 0) // se o código retornar um número acima de 0, significa que o produto já está cadastrada
                            throw new Exception("Este produto já existe no sistema"); // Se cair no throw automaticamente os comandos de inserção são cancelados

                        objPro.inserir();
                        proCompra = objPro.pro_codigo;
                        objPro.limpar();
                        limpar();
                        MessageBox.Show("Produto incluído com sucesso", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                    }
                    else //Alteração
                    {
                        //Verificar se o nome do produto alterado é igual ao de outro no banco
                        ProdutosBLL objPro2 = new ProdutosBLL();
                        objPro2.localizar(objPro.pro_nome, "pro_nome"); //Pesquisa por descrição, na coluna descrição
                        if (objPro2.pro_codigo != objPro.pro_codigo && objPro2.pro_codigo > 0) // se o código retornar um número acima de 0, significa que o produto já está cadastrada
                        {
                            objPro2 = null;
                            throw new Exception("Este produto já existe no sistema"); // Se cair no throw automaticamente os comandos de inserção são cancelados
                        }
                        objPro2 = null;

                        objPro.alterar();
                        objPro.limpar();
                        limpar();
                        MessageBox.Show("Produto alterado com sucesso", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                    }
                }
                else if (TabControl1.SelectedIndex == 1)
                {

                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void btCancelar_Click(object sender, EventArgs e)
        {
            try
            {
                objPro.limpar();
                limpar();
                txtCodigo.Enabled = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void btExcluir_Click(object sender, EventArgs e)
        {
            try
            {
                if (objPro.pro_codigo != 0)
                {
                    if (MessageBox.Show("Deseja realmente excluir?", "Excluir", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == System.Windows.Forms.DialogResult.Yes)
                    {

                        objPro.excluir();
                        objPro.limpar();
                        limpar();
                        carregaGrid();
                        MessageBox.Show("Produto excluído com sucesso", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                    }
                }
                else
                    MessageBox.Show("Favor selecionar um produto na aba 'Pesquisar', ou escolha um código válido para poder excluir", "Excluir", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void txtCodigo_Leave(object sender, EventArgs e)
        {
            try
            {
                // Localizar usuário
                int cod;
                int.TryParse(txtCodigo.Text, out cod);
                if (cod != 0)
                {
                    objPro.limpar();
                    objPro.localizarLeave(cod.ToString(), "pro_codigo");
                    if (objPro.pro_codigo != 0)
                    {
                        carregaCampos();
                        txtCodigo.Enabled = false;
                    }
                    else
                        limpar();
                }
                else
                    limpar();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void btPrimeiro_Click(object sender, EventArgs e)
        {
            try
            {
                if (txtCodigo.Text != "")
                    carregaPropriedades();
                else
                    limpar();
                objPro.localizarPrimeiroUltimo("primeiro");
                if (objPro.pro_codigo != 0)
                {
                    objPro.localizar(objPro.pro_codigo.ToString(), "pro_codigo");
                    carregaCampos();
                    txtCodigo.Enabled = false;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void btAnterior_Click(object sender, EventArgs e)
        {
            try
            {
                if (txtCodigo.Text != "")
                    carregaPropriedades();
                else
                    limpar();
                if (txtCodigo.Text == "")
                    objPro.localizarProxAnterior("anterior", 0);
                else
                    objPro.localizarProxAnterior("anterior", int.Parse(txtCodigo.Text));
                if (objPro.pro_codigo != 0)
                {
                    objPro.localizar(objPro.pro_codigo.ToString(), "pro_codigo ");
                    carregaCampos();
                    txtCodigo.Enabled = false;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void btProximo_Click(object sender, EventArgs e)
        {
            try
            {
                if (txtCodigo.Text != "")
                    carregaPropriedades();
                else
                    limpar();
                if (txtCodigo.Text == "")
                    objPro.localizarProxAnterior("proximo", 0);
                else
                    objPro.localizarProxAnterior("proximo", int.Parse(txtCodigo.Text));
                if (objPro.pro_codigo != 0)
                {
                    objPro.localizar(objPro.pro_codigo.ToString(), "pro_codigo");
                    carregaCampos();
                    txtCodigo.Enabled = false;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void btUltimo_Click(object sender, EventArgs e)
        {
            try
            {
                if (txtCodigo.Text != "")
                    carregaPropriedades();
                else
                    limpar();
                objPro.localizarPrimeiroUltimo("ultimo");
                if (objPro.pro_codigo != 0)
                {
                    objPro.localizar(objPro.pro_codigo.ToString(), "pro_codigo");
                    carregaCampos();
                    txtCodigo.Enabled = false;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void txtPesquisar_TextChanged(object sender, EventArgs e)
        {
            try
            {
                carregaGrid();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void gvPesquisa_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (e.RowIndex > -1 && e.RowIndex < gvPesquisa.Rows.Count)
                {
                    int cod = 0;
                    cod = int.Parse(gvPesquisa.Rows[e.RowIndex].Cells[0].Value.ToString());
                    if (cod != 0)
                    {
                        TabControl1.SelectedIndex = 0;
                        txtPesquisar.Text = "";
                        objPro.pro_codigo = cod;
                        objPro.localizar(objPro.pro_codigo.ToString(), "pro_codigo");
                        txtCodigo.Text = objPro.pro_codigo.ToString();
                        txtCodigo.Enabled = false;
                        carregaCampos();
                    }
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void TabControl1_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (TabControl1.SelectedIndex == 1)
                {
                    objPro.limpar();
                    limpar();
                    carregaGrid();
                    txtPesquisar.Focus();
                    //this.MaximumSize = new Size(this.Width, this.Height + 100);
                    //this.MinimumSize = new Size(this.Width, this.Height + 100);
                    //this.Size = new Size(this.Width, this.Height + 100);
                    //this.Location = new System.Drawing.Point(this.Location.X, this.Location.Y-100); 
                    btAnterior.Enabled = false;
                    btPrimeiro.Enabled = false;
                    btProximo.Enabled = false;
                    btUltimo.Enabled = false;
                }
                else if (TabControl1.SelectedIndex == 0)
                {
                    objPro.limpar();
                    //this.MaximumSize = new Size(this.Width, this.Height - 50);
                    //this.MinimumSize = new Size(this.Width, this.Height - 50);
                    //this.Size = new Size(this.Width, this.Height - 50);
                    //this.Location = new System.Drawing.Point(this.Location.X, this.Location.Y+100);
                    btAnterior.Enabled = true;
                    btPrimeiro.Enabled = true;
                    btProximo.Enabled = true;
                    btUltimo.Enabled = true;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void gvPesquisa_Sorted(object sender, EventArgs e)
        {
            try
            {
                stiloGrid();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }   
        }

        private void gvPesquisa_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (e.RowIndex > -1 && e.RowIndex < gvPesquisa.Rows.Count)
                {
                    objPro.localizar(gvPesquisa.Rows[e.RowIndex].Cells[0].Value.ToString(), "pro_codigo");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            } 
        }

        private void txtPrecoCusto_Leave(object sender, EventArgs e)
        {
            try
            {
                if (txtPrecoCusto.Text != "")
                    txtPrecoCusto.Text = Convert.ToDouble(txtPrecoCusto.Text).ToString("C");
            }
            catch (Exception)
            {
                txtPrecoCusto.Text = "";
                //MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            } 
        }

        private void txtPrecoCusto_KeyPress(object sender, KeyPressEventArgs e)
        {
            try
            {
                if ((e.KeyChar < '0' || e.KeyChar > '9') &&
              (e.KeyChar != ',' && e.KeyChar != '.' &&
               e.KeyChar != (Char)13 && e.KeyChar != (Char)8))
                {
                    e.KeyChar = (Char)0;
                }
                else
                {
                    if (e.KeyChar == '.' || e.KeyChar == ',')
                    {
                        if (!txtPrecoCusto.Text.Contains(','))
                        {
                            e.KeyChar = ',';
                        }
                        else
                        {
                            e.KeyChar = (Char)0;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            } 
        }

        private void txtPrecoCusto_Enter(object sender, EventArgs e)
        {
            try
            {
                String x = "";
                for (int i = 0; i <= txtPrecoCusto.Text.Length - 1; i++)
                {
                    if ((txtPrecoCusto.Text[i] >= '0' &&
                    txtPrecoCusto.Text[i] <= '9') ||
                    txtPrecoCusto.Text[i] == ',')
                    {
                        x += txtPrecoCusto.Text[i];
                    }
                }
                txtPrecoCusto.Text = x;
                txtPrecoCusto.SelectAll();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            } 
        }

        private void txtPrecoVenda_Leave(object sender, EventArgs e)
        {
            try
            {
                if (txtPrecoCusto.Text != "" && txtPrecoVenda.Text != "")
                {
                    String x = "";
                    for (int i = 0; i <= txtPrecoVenda.Text.Length - 1; i++)
                    {
                        if ((txtPrecoVenda.Text[i] >= '0' &&
                        txtPrecoVenda.Text[i] <= '9') ||
                        txtPrecoVenda.Text[i] == ',')
                        {
                            x += txtPrecoVenda.Text[i];
                        }
                    }
                    txtPrecoVenda.Text = x;

                    x = "";
                    for (int i = 0; i <= txtPrecoCusto.Text.Length - 1; i++)
                    {
                        if ((txtPrecoCusto.Text[i] >= '0' &&
                        txtPrecoCusto.Text[i] <= '9') ||
                        txtPrecoCusto.Text[i] == ',')
                        {
                            x += txtPrecoCusto.Text[i];
                        }
                    }
                    txtPrecoCusto.Text = x;


                    Double custo = Double.Parse(txtPrecoCusto.Text);
                    Double venda = Double.Parse(txtPrecoVenda.Text);
                    Double margem = venda / custo * 100 - 100;
                    txtMargem.Text = margem.ToString();
                }
                txtMargem.Text = Math.Round(Double.Parse(txtMargem.Text), 2).ToString();
                txtPrecoVenda.Text = Math.Round(Double.Parse(txtPrecoVenda.Text), 2).ToString();
                if (txtPrecoVenda.Text != "")
                    txtPrecoVenda.Text = Convert.ToDouble(txtPrecoVenda.Text).ToString("C");
                if (txtPrecoCusto.Text != "")
                    txtPrecoCusto.Text = Convert.ToDouble(txtPrecoCusto.Text).ToString("C");
            }
            catch (Exception)
            {
                txtPrecoVenda.Text = "";
                //MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            } 
        }

        private void txtPrecoVenda_KeyPress(object sender, KeyPressEventArgs e)
        {
            try
            {
                if ((e.KeyChar < '0' || e.KeyChar > '9') &&
              (e.KeyChar != ',' && e.KeyChar != '.' &&
               e.KeyChar != (Char)13 && e.KeyChar != (Char)8))
                {
                    e.KeyChar = (Char)0;
                }
                else
                {
                    if (e.KeyChar == '.' || e.KeyChar == ',')
                    {
                        if (!txtPrecoVenda.Text.Contains(','))
                        {
                            e.KeyChar = ',';
                        }
                        else
                        {
                            e.KeyChar = (Char)0;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            } 
        }

        private void txtPrecoVenda_Enter(object sender, EventArgs e)
        {
            try
            {
                String x = "";
                for (int i = 0; i <= txtPrecoVenda.Text.Length - 1; i++)
                {
                    if ((txtPrecoVenda.Text[i] >= '0' &&
                    txtPrecoVenda.Text[i] <= '9') ||
                    txtPrecoVenda.Text[i] == ',')
                    {
                        x += txtPrecoVenda.Text[i];
                    }
                }
                txtPrecoVenda.Text = x;
                txtPrecoVenda.SelectAll();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            } 
        }

        private void txtEstoqueAtual_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit(e.KeyChar) && e.KeyChar != (char)8)
            {
                e.Handled = true;
            }
        }

        private void txtEstoqueMinimo_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit(e.KeyChar) && e.KeyChar != (char)8)
            {
                e.Handled = true;
            }
        }

        private void txtEstoqueMaximo_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit(e.KeyChar) && e.KeyChar != (char)8)
            {
                e.Handled = true;
            }
        }

        private void txtCodigoBarras_Leave(object sender, EventArgs e)
        {
            //try
            //{
            //    if (txtCodigoBarras.Text.Length == 13)
            //    {
            //        System.Drawing.Graphics g = this.pictureBox1.CreateGraphics();
            //        g.FillRectangle(new System.Drawing.SolidBrush(System.Drawing.SystemColors.Control),
            //            new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height));
            //        CreateEan13();
            //        ean13.Scale = (float)Convert.ToDecimal("0,8");//(float)Convert.ToDecimal(cboScale.Items[cboScale.SelectedIndex]);
            //        ean13.DrawEan13Barcode(g, new System.Drawing.Point(0, 0));
            //        g.Dispose();
            //    }
            //    else
            //        pictureBox1.Image = null;
            //}
            //catch (Exception ex)
            //{
            //    MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            //}

            try
            {
                // Localizar Produto
                String cod;
                cod = txtCodigoBarras.Text;
                if (cod != "")
                {
                    objPro.limpar();
                    objPro.localizarLeave(cod.ToString(), "pro_codigoBarra");
                    if (objPro.pro_codigo != 0)
                    {
                        carregaCampos();
                        txtCodigo.Enabled = false;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void CreateEan13()
        {
            try
            {
                if (txtCodigoBarras.Text.Length == 13)
                {
                    ean13 = new Ean13();

                    for (int i = 0; i < 13; i++)
                    {
                        if (i < 3)
                        {
                            if (i == 0)
                                ean13.CountryCode = txtCodigoBarras.Text[i].ToString();
                            else
                                ean13.CountryCode += txtCodigoBarras.Text[i];
                        }
                        else if (i > 2 && i < 8)
                        {
                            if (i == 3)
                                ean13.ManufacturerCode = txtCodigoBarras.Text[i].ToString();
                            else
                                ean13.ManufacturerCode += txtCodigoBarras.Text[i];
                        }
                        else if (i < 12)
                        {
                            if (i == 8)
                                ean13.ProductCode = txtCodigoBarras.Text[i].ToString();
                            else
                                ean13.ProductCode += txtCodigoBarras.Text[i];
                        }
                        else
                            ean13.ChecksumDigit = txtCodigoBarras.Text[i].ToString();
                    }
                }
                else
                    pictureBox1.Image = null;
            }
            catch (Exception)
            {

                throw;
            }
        }

        private void txtCodigoBarras_TextChanged(object sender, EventArgs e)
        {
            //if (txtCodigoBarras.Text.Length == 12)
            txtCodigoBarras_Leave(sender, e);
            //else
            //  pictureBox1.Image = null;
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox1.Checked == true)
            {
                Dados objD = new Dados();
                objD.preencheComboBox(cbFornecedor, "Fornecedores", "for_codigo", "for_razaoSocial", "for_tipo_fornecedor = 'Pessoa Jurídica'", "for_razaoSocial");
                objD = null;
                cbFornecedor.SelectedIndex = -1;
            }
            else
            {
                Dados objD = new Dados();
                objD.preencheComboBox(cbFornecedor, "Fornecedores", "for_codigo", "for_nome", "for_tipo_fornecedor = 'Pessoa Física'", "for_nome");
                objD = null;
                cbFornecedor.SelectedIndex = -1;
            }
        }

        private void txtMargem_Leave(object sender, EventArgs e)
        {
            try
            {
                if (txtPrecoCusto.Text != "" && txtMargem.Text != "")
                {
                    String x = "";
                    for (int i = 0; i <= txtPrecoCusto.Text.Length - 1; i++)
                    {
                        if ((txtPrecoCusto.Text[i] >= '0' &&
                        txtPrecoCusto.Text[i] <= '9') ||
                        txtPrecoCusto.Text[i] == ',')
                        {
                            x += txtPrecoCusto.Text[i];
                        }
                    }
                    txtPrecoCusto.Text = x;

                    Double custo = Double.Parse(txtPrecoCusto.Text);
                    Double margem = Double.Parse(txtMargem.Text);
                    Double res = custo + custo * margem / 100;
                    txtPrecoVenda.Text = String.Format(res.ToString(), "C");
                    txtPrecoCusto.Text = String.Format(txtPrecoCusto.Text, "C");
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void txtMargem_KeyPress(object sender, KeyPressEventArgs e)
        {
            try
            {
                if ((e.KeyChar < '0' || e.KeyChar > '9') &&
              (e.KeyChar != ',' && e.KeyChar != '.' &&
               e.KeyChar != (Char)13 && e.KeyChar != (Char)8))
                {
                    e.KeyChar = (Char)0;
                }
                else
                {
                    if (e.KeyChar == '.' || e.KeyChar == ',')
                    {
                        if (!txtMargem.Text.Contains(','))
                        {
                            e.KeyChar = ',';
                        }
                        else
                        {
                            e.KeyChar = (Char)0;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            } 
        }

        private void txtAdicionaEstoque_KeyPress(object sender, KeyPressEventArgs e)
        {
            try
            {
                if (!char.IsDigit(e.KeyChar) && e.KeyChar != (char)8)
                {
                    e.Handled = true;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void txtTamanho_KeyPress(object sender, KeyPressEventArgs e)
        {
            try
            {
                if (!char.IsDigit(e.KeyChar) && e.KeyChar != (char)8)
                {
                    e.Handled = true;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void txtComissao_KeyPress(object sender, KeyPressEventArgs e)
        {
            try
            {
                if ((e.KeyChar < '0' || e.KeyChar > '9') &&
              (e.KeyChar != ',' && e.KeyChar != '.' &&
               e.KeyChar != (Char)13 && e.KeyChar != (Char)8))
                {
                    e.KeyChar = (Char)0;
                }
                else
                {
                    if (e.KeyChar == '.' || e.KeyChar == ',')
                    {
                        if (!txtComissao.Text.Contains(','))
                        {
                            e.KeyChar = ',';
                        }
                        else
                        {
                            e.KeyChar = (Char)0;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            } 
        }

        private void btInserirFornecedor_Click(object sender, EventArgs e)
        {
            try
            {
                CADASTROS.Fornecedor frm = new CADASTROS.Fornecedor();
                frm.ShowDialog();
                frm = null;
                Dados objD = new Dados();
                objD.preencheComboBox(cbFornecedor, "Fornecedores", "for_codigo", "for_nome", "for_tipo_fornecedor = 'Pessoa Física'", "for_nome");
                objD = null;

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void btInserirCategoria_Click(object sender, EventArgs e)
        {
            try
            {
                CADASTROS.Categoria frm = new CADASTROS.Categoria();
                frm.ShowDialog();
                frm = null;
                Dados objD = new Dados();
                objD.preencheComboBox(cbCategoria, "Categoria", "cat_codigo", "cat_descricao", "", "cat_descricao");
                objD = null;

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void btInserirGrupo_Click(object sender, EventArgs e)
        {
            try
            {
                CADASTROS.Grupo frm = new CADASTROS.Grupo();
                frm.ShowDialog();
                frm = null;
                Dados objD = new Dados();
                objD.preencheComboBox(cbGrupo, "Grupo", "gru_codigo", "gru_descricao", "", "gru_descricao");
                objD = null;

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void btInserirSubgrupo_Click(object sender, EventArgs e)
        {
            try
            {
                CADASTROS.Sub_Grupo frm = new CADASTROS.Sub_Grupo();
                frm.ShowDialog();
                frm = null;
                Dados objD = new Dados();
                objD.preencheComboBox(cbSubgrupo, "SubGrupo", "sg_codigo", "sg_descricao", "", "sg_descricao");
                objD = null;

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void btInserirUnidade_Click(object sender, EventArgs e)
        {
            try
            {
                CADASTROS.Unidades frm = new CADASTROS.Unidades();
                frm.ShowDialog();
                frm = null;
                Dados objD = new Dados();
                objD.preencheComboBox(cbUnidade, "Unidades", "uni_codigo", "uni_descricao", "", "uni_descricao");
                objD = null;

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void button5_Click(object sender, EventArgs e)
        {
            try
            {
                CADASTROS.Marcas frm = new CADASTROS.Marcas();
                frm.ShowDialog();
                frm = null;
                Dados objD = new Dados();
                objD.preencheComboBox(cbMarca, "Marcas", "mar_codigo", "mar_descricao", "", "mar_descricao");
                objD = null;

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }



    }
}
